package com.coolt.server.control;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;

import com.coolt.client.model.Usuario;
import com.coolt.server.util.HibernateUtil;

public class UsuarioBO {

	/**
	 * List Coolt Users depending on the usuario filter
	 */
	public List<Usuario> listar(Usuario usuario, int tamPagina, int pageNow) {

		List<Usuario> lista = null;

		DetachedCriteria criterialista = DetachedCriteria
				.forClass(Usuario.class);

		criterialista.add(Example.create(usuario).ignoreCase().enableLike(
				MatchMode.ANYWHERE));

		if (usuario.getNmusuario() == null) {
			criterialista.addOrder(Order.desc("dtlog"));
		} else {
			criterialista.addOrder(Order.asc("nmusuario"));
		}

		Session session = HibernateUtil.getSession();
		session.beginTransaction();

		Criteria criteria = criterialista.getExecutableCriteria(session);
		if (tamPagina > 0) {
			criteria.setMaxResults(tamPagina);
			if (pageNow > 1) {
				criteria.setFirstResult((pageNow - 1) * tamPagina);
			}
		}

		lista = criteria.list();

		session.getTransaction().commit();

		return lista;
	}

}
